package br.com.seosoft.simplecalcfinan;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import br.com.seosoft.simplecalcfinan.adapters.SectionspagerAdapter;
import br.com.seosoft.simplecalcfinan.bancoDados.BancoDados;
import br.com.seosoft.simplecalcfinan.fragmentos.FragContas.CallbackTotalMes;
import br.com.seosoft.simplecalcfinan.utils.ChangeLogDialog;
import br.com.seosoft.simplecalcfinan.utils.Propaganda;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;


public class contas extends ActivyGeral implements
		ActionBar.OnNavigationListener, CallbackTotalMes {

	private ListView list;
	private int[] id;
	private String fk_grupo = null;
	private String[] descricao;
	private BigDecimal[] saldo;
	private Date[] data;
	private int codigo = 1;
	private String descricao_grupo;
	private AdView adView;
	private String position_pasta;
	private SharedPreferences preference;
	private SharedPreferences.Editor editor;
	private ActionBar actionbar;
	private ArrayAdapter<String> adapterListaAnos;
	private SectionspagerAdapter mSectionsPagerAdapter;
	private geral geral;
	private TextView tvTotal;
	private Double todosMeses = 0.0;
	private Double janeiro = 0.0;
	private Double fevereiro = 0.0;
	private Double marco = 0.0;
	private Double abril = 0.0;
	private Double maio = 0.0;
	private Double junho = 0.0;
	private Double julho = 0.0;
	private Double agosto = 0.0;
	private Double setembro = 0.0;
	private Double outubro = 0.0;
	private Double novembro = 0.0;
	private Double dezembro = 0.0;
	private String ano = "0";

	// private BancoDados bd;
	// Animacao no text view
	AlphaAnimation fadeIn = new AlphaAnimation(0.0f, 1.0f);
	AlphaAnimation fadeOut = new AlphaAnimation(1.0f, 0.0f);

	/**
	 * The {@link ViewPager} that will host the section contents.
	 */
	ViewPager mViewPager;
	

	/** Called when the activity is first created. */

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.contas);
		
		tvTotal = (TextView) findViewById(R.id.TotalContas);

		ObterParamsTela();
		// BOTAO NOVO
		final ImageButton btnNovo = (ImageButton) findViewById(R.id.ibNovo);
		Propaganda propaganda = new Propaganda();
		mViewPager = (ViewPager) findViewById(R.id.pager);

		preference = PreferenceManager
				.getDefaultSharedPreferences(getApplicationContext());
		editor = preference.edit();

		if (!propaganda.verificarClienteJaPago(this)) {
			mostrarBanner();
		}
		// ABRE BANCO DADOS
		// BancoDados bd = new BancoDados(this);

		// PEGA A LISTA
		// list = (ListView) findViewById(R.id.list);
		// registerForContextMenu(list);

		ListarContas(false);

		// Bot��o NOVO
		btnNovo.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				novoRegistro();

			}
		});// fim bot��o NOVO

		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub

				switch (arg0) {

				case 0:

					tvTotal.setText(geral.DecimalCurrency(todosMeses));
					tvTotal.setTextColor(geral.mudarCor(todosMeses));
					break;
				case 1:
					tvTotal.setText(geral.DecimalCurrency(janeiro));
					tvTotal.setTextColor(geral.mudarCor(janeiro));
					break;
				case 2:
					tvTotal.setText(geral.DecimalCurrency(fevereiro));
					tvTotal.setTextColor(geral.mudarCor(fevereiro));
					break;
				case 3:
					tvTotal.setText(geral.DecimalCurrency(marco));
					tvTotal.setTextColor(geral.mudarCor(marco));
					break;
				case 4:
					tvTotal.setText(geral.DecimalCurrency(abril));
					tvTotal.setTextColor(geral.mudarCor(abril));
					break;
				case 5:
					tvTotal.setText(geral.DecimalCurrency(maio));
					tvTotal.setTextColor(geral.mudarCor(maio));
					break;
				case 6:
					tvTotal.setText(geral.DecimalCurrency(junho));
					tvTotal.setTextColor(geral.mudarCor(junho));
					break;
				case 7:
					tvTotal.setText(geral.DecimalCurrency(julho));
					tvTotal.setTextColor(geral.mudarCor(julho));
					break;
				case 8:
					tvTotal.setText(geral.DecimalCurrency(agosto));
					tvTotal.setTextColor(geral.mudarCor(agosto));
					break;
				case 9:
					tvTotal.setText(geral.DecimalCurrency(setembro));
					tvTotal.setTextColor(geral.mudarCor(setembro));
					break;
				case 10:
					tvTotal.setText(geral.DecimalCurrency(outubro));
					tvTotal.setTextColor(geral.mudarCor(outubro));
					break;
				case 11:
					tvTotal.setText(geral.DecimalCurrency(novembro));
					tvTotal.setTextColor(geral.mudarCor(novembro));
					break;
				case 12:
					tvTotal.setText(geral.DecimalCurrency(dezembro));
					tvTotal.setTextColor(geral.mudarCor(dezembro));
					break;
				default:
					break;
				}

			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub

			}
		});

	}
	


	private void setNavegacaoDropDownAno(List<String> anos) {
		// TODO Auto-generated method stub

		// ATIVA NAVEGACAO DROPDOWN
		actionbar = getSupportActionBar();

		actionbar.setTitle(R.string.contas);

		// Ativa navegacao de lista para navegar pelas contas pelo ano
		actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

		adapterListaAnos = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, android.R.id.text1, anos);

		// Ao cliclar em uma data do ano
		actionbar.setListNavigationCallbacks(adapterListaAnos, this);
	}

	// MENU NOVIDADES ALERT DIALOG

	public void novidades() {

		ChangeLogDialog changeLog = new ChangeLogDialog(this);
		changeLog.show();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub

		getSupportMenuInflater().inflate(R.menu.menu, menu);

		MenuItem logout = (MenuItem) menu.findItem(R.id.menuSair);

		if (br.com.seosoft.simplecalcfinan.geral.logado == true) {
			logout.setVisible(true);
		}

		if (VERSION.SDK_INT >= 14) {
			menu.findItem(R.id.menuImportarSms).setVisible(true);

		}
		MenuItem menuData = menu.findItem(R.id.menuSortData).setVisible(true);
		MenuItem menuValor = menu.findItem(R.id.menuSortValor).setVisible(true);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {

		case android.R.id.home:

			Intent parentActivityIntent = new Intent(this, inicial.class);
			parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
					| Intent.FLAG_ACTIVITY_NEW_TASK
					| Intent.FLAG_ACTIVITY_CLEAR_TASK);
			startActivity(parentActivityIntent);
			finish();
			return true;
		case R.id.menuRate:

			Uri uri = Uri.parse("market://details?id="
					+ getApplicationContext().getPackageName());
			Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
			startActivity(goToMarket);
			return true;
		case R.id.meuNovidades:

			novidades();
			return true;
		case R.id.menuConfig:

			startActivityForResult(new Intent(getApplicationContext(),
					Config.class), codigo);

			return true;

		case R.id.menuSair:

			br.com.seosoft.simplecalcfinan.geral.logado = false;

			android.os.Process.killProcess(android.os.Process.myPid());

			return true;

		case R.id.menuSortData:

			if (item.isChecked()) {

				item.setChecked(false);
				editor.putBoolean(
						br.com.seosoft.simplecalcfinan.geral.ORDENAR_SQL_DATA,
						true);
				editor.commit();

			} else {
				item.setChecked(true);

				editor.putBoolean(
						br.com.seosoft.simplecalcfinan.geral.ORDENAR_SQL_DATA,
						false);
				editor.commit();
			}
			int atual = mViewPager.getCurrentItem();

			mSectionsPagerAdapter = new SectionspagerAdapter(
					getSupportFragmentManager(), this, fk_grupo,
					parseStringAnoToIntAno(ano), position_pasta, false);
			mViewPager.setAdapter(mSectionsPagerAdapter);
			mViewPager.setCurrentItem(atual);
			//
			// FragContas fragcontas2 = (FragContas) mSectionsPagerAdapter
			// .getFragment(mViewPager.getCurrentItem());
			//
			// fragcontas2.buscarContas(false);

			return true;

		case R.id.menuSortValor:

			if (item.isChecked()) {

				item.setChecked(false);
				item.setIcon(R.drawable.ic_sort_inverse);
				editor.putBoolean(
						br.com.seosoft.simplecalcfinan.geral.ORDENAR_SQL_VALOR,
						true);
				editor.commit();

				// FragContas fragcontas = (FragContas) mSectionsPagerAdapter
				// .getFragment(mViewPager.getCurrentItem());
				//
				// fragcontas.buscarContasValor(true);

			} else {
				item.setChecked(true);
				item.setIcon(R.drawable.ic_sort);
				editor.putBoolean(
						br.com.seosoft.simplecalcfinan.geral.ORDENAR_SQL_VALOR,
						false);
				editor.commit();
				// FragContas fragcontas = (FragContas) mSectionsPagerAdapter
				// .getFragment(mViewPager.getCurrentItem());
				// fragcontas.buscarContasValor(false);
			}

			atual = mViewPager.getCurrentItem();

			mSectionsPagerAdapter = new SectionspagerAdapter(
					getSupportFragmentManager(), this, fk_grupo,
					parseStringAnoToIntAno(ano), position_pasta, true);
			mViewPager.setAdapter(mSectionsPagerAdapter);
			mViewPager.setCurrentItem(atual);

			return true;

		}
		return super.onOptionsItemSelected(item);
	}

	// FU����O AdMob Google
	public void mostrarBanner() {

		if (!preference.getBoolean(
				br.com.seosoft.simplecalcfinan.geral.REMOVEU_ADS, true)) {
			
//			RevMobBanner banner = revmob.createBanner(this);
//	        ViewGroup view = (ViewGroup) findViewById(R.id.BannerListaContas);
//	        view.addView(banner);

//			// Create the adView
			adView = new AdView(this);
			adView.setAdSize(AdSize.BANNER);
			adView.setAdUnitId(br.com.seosoft.simplecalcfinan.geral.id_AdMob);
			// Lookup your LinearLayout assuming it���s been given
			// the attribute android:id="@+id/mainLayout"
			LinearLayout layout = (LinearLayout) findViewById(R.id.BannerListaContas);

			// Add the adView to it
			layout.addView(adView);

			// Initiate a generic request to load it with an ad
			AdRequest request = new AdRequest.Builder().build();
			// request.addTestDevice(AdRequest.TEST_EMULATOR);// Emulador
			// request.addTestDevice("emulator-5554");// Testar dispositivo
			// Android

			adView.loadAd(request);

		}

	}

	// OBTEM PARAMETROS GRUPO
	public void ObterParamsTela() {

		// Volta valores pra tela principal

		Intent itConta = new Intent();
		// Seta a mensagem de retorno
		itConta.putExtra("atualizar", "sim");
		// Seta o status do resultado e a Intent
		setResult(1, itConta);

		TextView tvDescGrupo = (TextView) findViewById(R.id.DescricaoFkGrupo);

		// Obetem parametros da tela principal

		Intent it = getIntent();
		if (it != null) {
			descricao_grupo = it.getStringExtra("desc_grupo");
			fk_grupo = it.getStringExtra("fk_grupo");

			position_pasta = it.getStringExtra("position_pasta");
			Log.e(br.com.seosoft.simplecalcfinan.geral.LogCat,
					"INTENT FK_GRUPO: " + fk_grupo);
			Log.e(br.com.seosoft.simplecalcfinan.geral.LogCat,
					"INTENT POSITION_PASTA: " + position_pasta);
			Log.e(br.com.seosoft.simplecalcfinan.geral.LogCat,
					"INTENT Desc_GRUPO: " + descricao_grupo);
			tvDescGrupo.setText(descricao_grupo);

		}
	}// fim ObterParamsTela

	// FUN����O LISTA CONTAS

	public void ListarContas(boolean valor) {

		new ListarContasThread().execute(valor);

	}

	public void toggleProgressBar() {

		LinearLayout layoutVazio = (LinearLayout) findViewById(R.id.layoutVazio);
		ProgressBar progress = (ProgressBar) findViewById(R.id.pbContasPb);

		if (layoutVazio.getVisibility() == View.VISIBLE) {
			layoutVazio.setVisibility(View.GONE);
			progress.setVisibility(View.GONE);
			list.setVisibility(View.VISIBLE);
		} else {
			layoutVazio.setVisibility(View.VISIBLE);
			list.setVisibility(View.GONE);
			progress.setVisibility(View.VISIBLE);
		}

	}

	public void toggleListaVazia() {

		LinearLayout layoutVazio = (LinearLayout) findViewById(R.id.layoutVazio);
		TextView texto = (TextView) findViewById(R.id.ListaVaziaContas);

		if (layoutVazio.getVisibility() == View.VISIBLE) {
			layoutVazio.setVisibility(View.GONE);
			texto.setVisibility(View.GONE);
			list.setVisibility(View.VISIBLE);
		} else {
			layoutVazio.setVisibility(View.VISIBLE);
			list.setVisibility(View.GONE);
			texto.setVisibility(View.VISIBLE);
		}

	}

	class ListarContasThread extends AsyncTask<Boolean, Void, List<geral>> {

		List<String> anosContas;
		BancoDados bd;

		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();

			bd = new BancoDados(getApplicationContext(), true);
		}

		@Override
		protected List<geral> doInBackground(Boolean... params) {
			// TODO Auto-generated method stub

			// Busca os Anos das contas
			anosContas = bd.buscarAnoInicialAnofinalContas(fk_grupo);
			return null;
		}

		@Override
		protected void onPostExecute(List<geral> result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);

			// FECHA O BANCO DE DADOS
			bd.fechar();

			if (anosContas.isEmpty()) {
				// toggleListaVazia();
			} else {
				setNavegacaoDropDownAno(anosContas);

			}
		}

	}

	// ADICIONA NOVO GRUPO
	public void novoRegistro() {

		final Intent itConta = new Intent(this, Ed_Contas.class);
		itConta.putExtra("acao", "novo");
		itConta.putExtra("position_pasta", position_pasta);
		itConta.putExtra("fk_grupo", fk_grupo);
		startActivityForResult(itConta, codigo);
	}

	//
	// // EDITAR REGISTRO GRUPO
	// public void editarRegistro(String id, String desc, BigDecimal _valor,
	// String fk_grupo, Long _data) {
	// final Intent itGrupos = new Intent(this, Ed_Contas.class);
	// itGrupos.putExtra("acao", "editar");
	// itGrupos.putExtra("position_pasta", position_pasta);
	// itGrupos.putExtra("id_conta", id);
	// itGrupos.putExtra("descricao_conta", desc);
	// itGrupos.putExtra("saldo", _valor.toString());
	// itGrupos.putExtra("fk_grupo", fk_grupo);
	// itGrupos.putExtra("data", _data);
	// startActivityForResult(itGrupos, codigo);
	// }

	// recebe resultado activity Valores

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {

		Log.v(geral.LogCat, "Result1:");
		ListarContas(false);
		if (codigo == requestCode) {
			Bundle params = data != null ? data.getExtras() : null;
			if (params != null) {
				String atualizar = params.getString("atualizar");
				if (resultCode == 1) {
					// Sim
					if (atualizar.equals("sim")) {
						Log.v(geral.LogCat, "Result1 entrou sim:");

					}
				}
			}
		}
	}

	@Override
	public boolean onNavigationItemSelected(int itemPosition, long itemId) {

		ano = adapterListaAnos.getItem(itemPosition);

		Log.v(br.com.seosoft.simplecalcfinan.geral.LogCat, "Selecionado Ano: "
				+ parseStringAnoToIntAno(ano));

		// Create the adapter that will return a fragment for each of the three
		// primary sections of the app.

		if (mSectionsPagerAdapter == null) {
			mSectionsPagerAdapter = new SectionspagerAdapter(
					getSupportFragmentManager(), this, fk_grupo,
					parseStringAnoToIntAno(ano), position_pasta, false);
		} else {
			mSectionsPagerAdapter = null;

			mSectionsPagerAdapter = new SectionspagerAdapter(
					getSupportFragmentManager(), this, fk_grupo,
					parseStringAnoToIntAno(ano), position_pasta, false);
		}

		// Set up the ViewPager with the sections adapter.

		int aux_pagina = mViewPager.getCurrentItem();

		mViewPager.invalidate();

		mViewPager.setAdapter(mSectionsPagerAdapter);

		mViewPager.setCurrentItem(aux_pagina, true);

		// TODO Auto-generated method stub
		return false;
	}

	private int parseStringAnoToIntAno(String ano) {
		Locale l = Locale.getDefault();

		if (ano.equals(getString(R.string.todos).toUpperCase(l))) {

			return 0;

		} else {

			return Integer.valueOf(ano);

		}

	}

	// AO DESTRUIR
		@Override
		public void onDestroy() {
			if (adView != null) {
				adView.destroy();
			}
			super.onDestroy();
		}

		@Override
		protected void onPause() {
			// TODO Auto-generated method stub
			super.onPause();
			if (adView != null) {
				adView.pause();
			}

		}

		@Override
		protected void onResume() {
			// TODO Auto-generated method stub
			super.onResume();
			if (adView != null) {
				adView.resume();
			}
		}

	@Override
	public void onTotalMes(int mes, Double total) {
		// TODO Auto-generated method stub
		if (geral == null) {
			geral = new geral();
		}

		Log.v(br.com.seosoft.simplecalcfinan.geral.LogCat, "Pagina Atual: "
				+ mViewPager.getCurrentItem() + " Mes Atual: " + mes);

		if (mViewPager.getCurrentItem() == mes) {

			tvTotal.setText(geral.DecimalCurrency(total));
			tvTotal.setTextColor(geral.mudarCor(total));

		}

		switch (mes) {

		case 0:
			todosMeses = total;
			break;
		case 1:
			janeiro = total;
			break;
		case 2:
			fevereiro = total;
			break;
		case 3:
			marco = total;
			break;
		case 4:
			abril = total;
			break;
		case 5:
			maio = total;
			break;
		case 6:
			junho = total;
			break;
		case 7:
			julho = total;
			break;
		case 8:
			agosto = total;
			break;
		case 9:
			setembro = total;
			break;
		case 10:
			outubro = total;
			break;
		case 11:
			novembro = total;
			break;
		case 12:
			dezembro = total;
			break;
		default:
			break;
		}

	}

};
